今天在改一个Wordpress主题,路径是相当遥远:
~/oldu/projects/3d-printing/3d-theme/
为了方便测试,我在Wordpress的themes
目录见了个符号连接到上面的路径。
$ ln -s ~/oldu/projects/3d-printing/3d-theme/ /path/to/wordpress/wp-content/themes/
一切都很好,然后我就直接在themes
目录下的3d-theme
工作了。我改啊改改啊改,然后我想临时移开一个文件,就移到..
吧:
$ mv content-excerpt.php ..
我再改啊改,然后发现themes
目录下没有content-excerpt.php,我大吃一惊,那个文件改了还没提交呢,就这样没了?
折腾一翻(TestDisk什么的~. ~),我才发现那个文件原来是被移到了~/oldu/projects/3d-printing/
,而不是我以为的/path/to/wordpress/wp-content/themes/
。
我觉得这有点怪,例如我现在有这样的目录结构
outer/
├── dir1
└── dir2
└── dir3 -> /tmp/workspace/outer/dir1/
dir2里的dir3就是到dir1的符号链接,当前目录是dir3时,..
会指向那里?
简单方法是ls
看看文件就知道了:
$ ls ..
dir1 dir2
也就是所..
实际上应该是outer。
对比一下inode发现的确是这样的:
$ stat /tmp/workspace/outer/ | grep Inode
Device: 1eh/30d Inode: 67074 Links: 4
$ stat .. | grep Inode
Device: 1eh/30d Inode: 67074 Links: 4
但是cd ..
的时候,你会传送到dir2而不是outer,说明..
作为cd参数时,不是作为一个目录,而是被特殊处理的。要跳到outer,加-P
选项,但是bash里一直不行,ash
倒是可以:
$ pwd
/tmp/workspace/outer/dir2/dir3
$ cd -P ..
$ pwd
/tmp/workspace/outer
bash里出错:
$ cd -P ..
bash: cd: - : invalid option
cd: usage: cd [-L|[-P [-e]]] [dir]
这是bug?
Edit 2013-09-23: 出错是因为我的cd是一个函数的别名,在那个函数里没处理好参数。